#ifndef FINANCIAL_INCOME_ANALYTICS_H
#define FINANCIAL_INCOME_ANALYTICS_H

#include <QWidget>
#include <QObject>
#include <QEvent>
#include <QStackedWidget>
#include <QTableWidget>
#include <QLabel>
#include <QPushButton>
#include <QComboBox>
#include <QDateEdit>
#include <QSizePolicy>
#include <QJsonArray>
#include <QTimer>
#include <QPropertyAnimation>
#include <QEasingCurve>
#include "api.h"
#include "income_chart_widget.h"

namespace Ui {
class financial_income_analytics;
}

class financial_income_analytics : public QWidget
{
    Q_OBJECT

public:
    explicit financial_income_analytics(QWidget *parent = nullptr);
    ~financial_income_analytics();

private slots:
    // Tab切换槽函数
    void on_realtimeTabBtn_clicked();
    void on_sourceTabBtn_clicked();
    void on_trendTabBtn_clicked();
    
    // 功能按钮槽函数
    void on_refreshBtn_clicked();
    void on_exportBtn_clicked();
    void on_analyzeBtn_clicked();
    void on_generateTrendBtn_clicked();
    
    // 图表相关槽函数
    void on_chartTimeRangeComboBox_currentIndexChanged(int index);
    void on_chartRefreshRateComboBox_currentIndexChanged(int index);

protected:
    // 事件过滤器
    virtual bool eventFilter(QObject *watched, QEvent *event) override;

private:
    Ui::financial_income_analytics *ui;
    Api *api; // API接口实例（单例模式）
    IncomeChartWidget *m_realtimeChart; // 实时收入趋势图表组件
    
    // UI初始化方法
    void setupUI();
    void setupConnections();
    void setupLabelStyles();
    
    // Tab切换相关方法
    void updateRealtimeMetrics();
    void updateSourceAnalysis();
    void updateBarChartTable(const QJsonArray& data);
    void updateTrendAnalysis();
    
    // 图表相关方法
    void setupRealtimeChart();
    // 图表更新方法
    void updateRealtimeChart(const QStringList &labels, const QList<double> &values);
    
    // 动画和动态更新方法
    void updateMetricValueWithAnimation(QLabel *label, double value, const QString &metricName, const QString &metricType);
    
    // 错误处理和状态管理方法
    void showLoadingState();
    void showErrorState(const QString& errorMessage);
    
    // 样式管理方法
    void setActiveTabButton(QPushButton *activeBtn);
    void setMetricValue(QLabel *label, double value, const QString &prefix = "¥ ");
    void setChangeValue(QLabel *label, double value);
    
    // 数据计算和验证方法
    double calculateChangeRate(double currentValue, double previousValue);
    bool isValidIncomeData(double value);
    void validateAndCalculateMetrics(const QJsonObject &data, 
                                   double &dailyChange, double &monthlyChange, 
                                   double &yearlyChange, double &realtimeChange);
    
    // 导出相关方法
    QString prepareExportData(int pageIndex);
    // metricsFrame removed - 移除了动画和动态更新方法的声明
};

#endif // FINANCIAL_INCOME_ANALYTICS_H